package com.kurt.service;

import com.kurt.dto.DataPermissionDTO;
import com.kurt.dto.create.DataPermissionCreateRequest;
import com.kurt.dto.query.DataPermissionQueryRequest;
import com.kurt.entity.SysUserDataPermission;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 数据权限服务接口
 * 提供数据权限相关的业务逻辑方法
 */
public interface DataPermissionService extends BaseService<SysUserDataPermission, Long> {

    /**
     * 创建数据权限
     *
     * @param createRequest 创建请求
     * @return 数据权限信息
     */
    DataPermissionDTO createDataPermission(DataPermissionCreateRequest createRequest);

    /**
     * 更新数据权限
     *
     * @param updateRequest 更新请求
     * @return 数据权限信息
     */

    /**
     * 根据ID获取数据权限详情
     *
     * @param id 权限ID
     * @return 数据权限信息
     */
    DataPermissionDTO getDataPermissionById(Long id);

    /**
     * 分页查询数据权限
     *
     * @param queryRequest 查询请求
     * @return 分页结果
     */
    Page<DataPermissionDTO> getDataPermissionPage(DataPermissionQueryRequest queryRequest);

    /**
     * 根据条件查询数据权限列表
     *
     * @param queryRequest 查询请求
     * @return 数据权限列表
     */
    List<DataPermissionDTO> getDataPermissionList(DataPermissionQueryRequest queryRequest);

    /**
     * 删除数据权限
     *
     * @param id 权限ID
     * @return 是否成功
     */
    boolean deleteDataPermission(Long id);

    /**
     * 批量删除数据权限
     *
     * @param ids 权限ID列表
     * @return 是否成功
     */
    boolean deleteDataPermissions(List<Long> ids);

    /**
     * 根据用户ID获取数据权限列表
     *
     * @param userId 用户ID
     * @return 数据权限列表
     */
    List<DataPermissionDTO> getDataPermissionsByUserId(Long userId);

    /**
     * 根据用户ID和实体类型获取数据权限列表
     *
     * @param userId     用户ID
     * @param entityType 实体类型
     * @return 数据权限列表
     */
    List<DataPermissionDTO> getDataPermissionsByUserIdAndEntityType(Long userId, String entityType);

    /**
     * 检查用户是否有指定资源的权限
     *
     * @param userId     用户ID
     * @param entityType 实体类型
     * @param resourceId 资源ID
     * @return 是否有权限
     */
    boolean hasPermission(Long userId, String entityType, Long resourceId);

    /**
     * 批量分配数据权限
     *
     * @param userId      用户ID
     * @param entityType  实体类型
     * @param resourceIds 资源ID列表
     * @return 是否成功
     */
    boolean assignDataPermissions(Long userId, String entityType, List<Long> resourceIds);

    /**
     * 撤销用户的数据权限
     *
     * @param userId      用户ID
     * @param entityType  实体类型
     * @param resourceIds 资源ID列表
     * @return 是否成功
     */
    boolean revokeDataPermissions(Long userId, String entityType, List<Long> resourceIds);

    /**
     * 检查权限是否存在
     *
     * @param userId         用户ID
     * @param entityType     实体类型
     * @param resourceId     资源ID
     * @param permissionType 权限类型
     * @return 是否存在
     */
    boolean existsPermission(Long userId, String entityType, Long resourceId, String permissionType);
}
